﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PalcoCentral
{
    public partial class pcGestorPrincipal : Form
    {
        private Database.person pessoaLogada;
        public pcGestorPrincipal(Database.person pessoaLogada)
        {
            InitializeComponent();
            this.WindowState = FormWindowState.Maximized;
            this.pessoaLogada = pessoaLogada;
            this.loginLabel.Text="Bem vindo(a) "+pessoaLogada.personName;
        }

        private void pcGestorPrincipal_Load(object sender, EventArgs e)
        {
            procurarBut.PerformClick();
            searchDiscBut.PerformClick();
        }

        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);
            if (!e.Cancel)
            {
                if (MessageBox.Show("Deseja mesmo sair?\nToda a informação não salva será perdida.", "Terminar aplicação", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
                {
                    e.Cancel = true;
                }
            }
        }

        private void refreshList(object sender, EventArgs e)
        {
            procurarBut.PerformClick();
            searchDiscBut.PerformClick();
        }

        private void addPessoaBut_Click(object sender, EventArgs e)
        {
            pcAdicionarPessoa addPessoa = new pcAdicionarPessoa();
            addPessoa.FormClosed += new FormClosedEventHandler(refreshList);
            addPessoa.ShowDialog();
        }

        private void procurarBut_Click(object sender, EventArgs e)
        {
            Library.OperationStatus os = Database.PersonDBAdapter.getInstance().searchPersons(searchPessoasET.Text);
            if (os.sucess)
            {
                List<Database.person> res = (List<Database.person>)os.res;
                listaPessoas.DataSource = res;
                listaPessoas.Update();
                if (res != null && res.Count > 0)
                {
                    //personDB.DataSource = res;

                }
                else
                {
                    Library.Utils.atentionFields("Não foram encontrados resultados.","Atenção");
                    //No Results Found
                }
            }
        }

        private void searchPessoasET_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                procurarBut.PerformClick();
            }
        }

        private void searchDescET_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                searchDiscBut.PerformClick();
            }
        }

        private void verPessoaBut_Click(object sender, EventArgs e)
        {
            if (!(listaPessoas.Items.Count == 0))
            {
                //Pessoa selecionada
                Database.person person = (Database.person)listaPessoas.SelectedItem;
                if (person == null)
                {
                    return;
                }

               // Library.OperationStatus os=Database.CourseDBAdapter.getInstance().addPersonToCourse(person, 5, Library.PersonRole.Teacher);


                //TODO: Mostra pessoa
                //Como passar variaveis em Windows Form? 
                //Força Bruta! Ou seja, na forma tens de ter um objeto publico (public Database.person person {ger; set} que é a pessoa depois fazes:
                pcVerPessoa verPessoa = new pcVerPessoa(person);
                //verPessoa.person=person;
                verPessoa.Text = string.Format("{0} - Palco Central [Software de Gestão]", person.personName);
                verPessoa.FormClosed += new FormClosedEventHandler(refreshList);
                verPessoa.ShowDialog(); //E é assim mais ou menos :P
            }
            else {
                Library.Utils.errorFields("Não existem pessoas na lista.","Impossivel ver pessoa");
            }

        }

        private void listaPessoas_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            verPessoaBut.PerformClick();
        }

        private void listaDisciplinas_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            verDiscBut.PerformClick();
        }

        private void addDiscBut_Click(object sender, EventArgs e)
        {
            pcAdicionarCurso addDisc = new pcAdicionarCurso();
            addDisc.FormClosed += new FormClosedEventHandler(refreshList);
            addDisc.ShowDialog();
        }

        private void searchDiscBut_Click(object sender, EventArgs e)
        {
            Library.OperationStatus os = Database.CourseDBAdapter.getInstance().searchCourse(searchDiscET.Text);
            if (os.sucess)
            {
                List<Database.course> res = (List<Database.course>)os.res;
                listaDisciplinas.DataSource = res;
                listaDisciplinas.Update();
                if (res != null && res.Count > 0)
                {
                    //personDB.DataSource = res;

                }
                else
                {
                    Library.Utils.atentionFields("Não foram encontrados resultados.", "Atenção");
                }
            }
        }

        private void verDiscBut_Click(object sender, EventArgs e)
        {
            if (!(listaDisciplinas.Items.Count == 0))
            {
                Database.course course = (Database.course)listaDisciplinas.SelectedItem;
                pcVerDisc verDisc = new pcVerDisc(course);
                verDisc.FormClosed += new FormClosedEventHandler(refreshList);
                verDisc.ShowDialog();
            }
            else
            {
                Library.Utils.errorFields("Não existem disciplinas na lista.", "Impossivel ver disciplina");
            }
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            pcPainelAdministrativo painelAdmin = new pcPainelAdministrativo(pessoaLogada);
            painelAdmin.ShowDialog();
        }


    }
}
